perm filename TVMAC[PIC,LCS]1 blob
sn#039042 filedate 1973-12-30 generic text, type T, neo UTF8
TITLE TVMAC
;OCTOBER 25, 68
INTERN INITAL, TVIN, HISTO, DECDMP,BUTT,RELE
EXTERN JOBFF,DEVTB.,COMMAC,JOBSYM,JOBREL
INTERN MSCAN,DECINP,SEINT,SEINF,PROJEC
EXTERN EDGEC,FLOAT,FORSE.,EXIT,INTO.
A1=1
A2=2
A3=3
A4=4
A5=5
A6=6
A7=7
DDEC=12
ARGAC=16
SPSH=17
DTV=17
OPDEF SUBR [PUSHJ 17,0]
OPDEF RETURN [POPJ 17,0]
PSHERR: HALT; PUSHDOWN LIST ERROR HALT
EXP .-1
PUSHDN: BLOCK 20; PUSHDOWN LIST
DECBUF: BLOCK 3; DECTAPE INPUT AND OUTPUT BUFFER
BCLIP=COMMAC; BOTTOM CLIP LEVEL
TCLIP=COMMAC+1; TOP CLIP LEVEL
BITS=COMMAC+2; SAMPLE WIDTH
IWID=COMMAC+3; INPUT WIDTH
LINLEN=COMMAC+4; WORDS PER TV LINE
FLINE=COMMAC+5; TOP (FIRST) LINE
LLINE=COMMAC+6; BOTTOM (LAST) LINE
LSIDE=COMMAC+7; LEFT SIDE
RSIDE=COMMAC+10; RIGHT SIDE
DTA=COMMAC+11
HYSTAB=COMMAC+12
TVOUT: POINT 4,0
SPUSH: IOWD 20,PUSHDN
FILE=EDGEC+↑D1781
TVIN: JUMP 0
MOVEM 16,RETAD
MOVEI 4
MOVEM BITS
SUBR ADJUST
SUBR TVSUBR
SUBR CONV
MOVE 16,RETAD
JRA 16,(16)
TVSUBR: MOVE A1,BCLIP
LSH A1,3
OR A1,TCLIP
DPB A1,[POINT 6,TVWD+1,23]
MOVE A1,FLINE
LSH A1,12
OR A1,LSIDE
LSH A1,11
MOVE A2,LINLEN
OR A1,A2
LSH A1,11
MOVEM A1,TVWD+2
INIT DTV,17
SIXBIT /TV/
Z
JRST .-3
MOVNI 0,1000; SET COUNTER FOR 1000 TRIES
SETZM PARCNT#
LAB25: INPUT DTV,TVWD
MOVE A6,TVWD+3; CHECK STATUS BITS
TRNE A6,100040; TEST FOR DATA MISSED OR PARITY ERROR
JRST TVUP
TRNE A6,20; TEST FOR SYSTEM ERROR
JRST SYSERR
TRNN A6,10; TEST FOR DONE FLAG
JRST LAB25
RELEASE DTV,
RETURN
CONV: SKIP
MOVE 0,[XWD LOOPD,2]; CONVERT GREY CODE
BLT 0,12
SETZM 13
MOVE 1,TVWD
JRST 2
TVWD: EXP 0,001002,0,0
TVUP: TRNE A6,100000
JRST PARERR
AOJL 0,LAB25; MISSED DATA - TRY AGAIN
HALT
JRST LAB25-2
SYSERR: HALT
CALLI 12
PARERR: AOS A6,PARCNT; PARITY ERROR
CAIG A6,12
JRST LAB25
HALT
JRST PARERR-1
LOOPD: PHASE 2
MOVE 14,(1)
MOVEI 11
MOVE 13,GREY(13)
ROTC 13,4
SOJGE .-2
MOVEM 14,(1)
AOBJN 1,.-6
RETURN
DEPHASE
GREY: EXP 12B3, 13B3, 11B3, 10B3, 15B3, 14B3, 16B3, 17B3
EXP 5B3, 4B3, 6B3, 7B3, 2B3, 3B3, 1B3, 0
;WORKS ONLY ON 4 BIT IMAGES
HISTO: JUMP 0
MOVE A1,BITS
CAIE A1,4
HALT
SETZM HYSTAB
MOVE A1,[XWD HYSTAB,HYSTAB+1]
BLT A1,HYSTAB+17
MOVE A1,LLINE
SUB A1,FLINE
AOS A1
IDIVI 1,2
MOVE 4,LINLEN
IMULI 4,2
MOVEM 4,LINLIN#
MOVE A2,[POINT 4,0]
HRR A2,TVWD
MOVEM A2,TVTMP#
MOVE A3,IWID
ILDB A4,A2
AOS HYSTAB(A4)
SOJG A3,.-2
MOVE A2,LINLIN
ADDB A2,TVTMP
SOJG A1,.-6
JRA 16,(16)
DECDMP: JUMP 0
MOVEM 16,RETAD#
MOVE JOBFF
MOVEM SVJFF#
MOVE DTA
ADDI 10
ADDI DEVTB.
MOVE @0
MOVEM SIXB
INIT DDEC,14
SIXB: Z
XWD DECBUF,
JRST INITER
OUTBUF DDEC,4
SUBR ASTOSI
MOVEM 1,OUTDEC
SETZM OUTDEC+2
SETZM OUTDEC+3
ENTER DDEC,OUTDEC
JRST ENTERR
MOVEI A1,RSIDE+1
SUBI A1,BCLIP
SETZM A2
MOVE ARGAC,BCLIP(A2)
SUBR DECOUT
AOS A2
SOJG A1,.-3
HLRO 1,TVWD
MOVNS 1
MOVEM A1,XINC#
MOVEM A1,ARGAC
SUBR DECOUT
MOVE A2,TVWD
HRRM A2,.+2
SETZM A2
MOVE ARGAC,.(A2)
SUBR DECOUT
AOS A2
SOJG A1,.-3
CLOSE DDEC,
MOVE SVJFF
MOVEM JOBFF
MOVE 16,RETAD
JRA 16,(16)
OUTDEC: Z
SIXBIT /DAT /
BLOCK 2
FORM4: JRST INITER
ASCIZ "(28H DEVICE INITIALIZATION ERROR)"
INITER: MOVEI 1,FORM4
JRST TYPE+3
FORM5: JRST ENTERR
ASCIZ "(26H FILE INITIALIZATION ERROR)"
ENTERR: MOVEI 1,FORM5
JRST TYPE+3
DECOUT: SOSLE DECBUF+2
JRST .+4
OUT DDEC,0
SKIPA
JRST ERROR
IDPB ARGAC,DECBUF+1
POPJ 17,
ERROR: GETSTS DDEC,A2
HALT
POP 17,A1; FLUSH UNUSED SUBR RETURN
MOVE A1,.-1
CAIE A1,15
JRST .-5
HALT
ASTOSI: MOVE FILE ;OUTPUT IN 1
MOVEI 5,5
SETZM 1
MOVE 4,[POINT 7,0]
MOVE 2,[POINT 6,1]
SETZM 3
ILDB 3,4
ADDI 3,40
IDPB 3,2
SOJG 5,.-3
RETURN
INITAL: JUMP 0
CALLI
RESET. 0
MOVE 17,SPUSH
MOVE BOOL
JUMPL ONCE
MOVE 2,JOBFF
MOVEM 2,TVBF#
SETOM BOOL
ONCE: MOVE 3,JOBREL
SUBI 3,2144
MOVEM 3,JOBFF
SUB 3,TVBF
MOVEM 3,TVFREE#
JRA 16,(16)
BOOL: Z
BUTT: JUMP 0
CALL [SIXBIT/SPCWAR/]
MOVEM @(16)
JRA 16,1(16)
RELE: JUMP 0
RELEASE 17,
JRA 16,(16)
INTERN ZERPP
EXTERN TEMP.
ZERPP: JUMP 0
SETZM TEMP.+3
JRA 16, 0(16)
ADJUST: MOVE A2,BITS
DPB A2,[POINT 6,TVOUT,11]
MOVEI A1,44
IDIV A1,A2
MOVEM 1,SAMP#
MOVE A2,A1
MOVE 1,RSIDE
ADDI 1,1
SUB 1,LSIDE
MOVEM 1,IWID
IDIV A1,A2
SKIPE A2
ADDI A1,1
MOVEM A1,LINLEN
MOVE 2,LLINE
ADDI 2,1
SUB 2,FLINE
IMUL 1,2
MOVEM 1,TVSZ#
MOVE 3,1
SUB 3,TVFREE
JUMPG 3,TYPE
MOVN TVSZ
HRLM TVWD
MOVE TVBF
HRRM TVWD
RETURN
FORMA: JRST TYPE
ASCIZ "(18H DUMP PROGRAM INTOI3,15H MORE K OF CORE)"
TYPE: IDIVI 3,2000
ADDI 3,1
MOVEI 1,FORMA
OUT. 1,-1
DATA. 3
FIN. 0
CALL [SIXBIT /EXIT/]
DECENT: SIXBIT /TEMP/
SIXBIT /DAT /
BLOCK 2
DECINP: JUMP 0
MOVEM 16,RETAD
MOVE JOBFF
MOVEM SVJFF
MOVE DTA
ADDI 10
ADDI DEVTB.
MOVE @0
MOVEM SIXP
INIT DDEC,14
SIXP: Z
XWD ,DECBUF
JRST INIERR
INBUF DDEC,4
SETZM DECENT+2
SETZM DECENT+3
SUBR ASTOSI
MOVEM 1,DECENT
LOOKUP DDEC,DECENT; ENTER TV IMAGE FROM TAPE
JRST LOKERR
MOVEI A1,RSIDE+1
SUBI A1,BCLIP
SETZM A2
SUBR DECIN
MOVEM ARGAC,BCLIP(A2)
AOS A2
SOJG A1,.-3
SUBR DECIN
MOVEM ARGAC,ARGSZ#
SUBR ADJUST
MOVE ARGAC,ARGSZ
CAME ARGAC,TVSZ
HALT
MOVE 3,TVSZ
HRRZ 2,TVWD
SUBR DECIN
MOVEM ARGAC,(A2)
AOS A2
SOJG A3,.-3
CLOSE DDEC,
MOVE SVJFF
MOVEM JOBFF
MOVE 16,RETAD
JRA 16,(16)
FORM2: JRST INIERR
ASCIZ "(20H WRONG DEVICE NUMBER)"
INIERR: MOVEI 1,FORM2
JRST TYPE+3
FORM3: JRST LOKERR
ASCIZ"(15H FILE NOT FOUND)"
LOKERR: MOVEI 1,FORM3
JRST TYPE+3
DECIN: SOSLE DECBUF+2; DECTAPE INPUT ROUTINE
JRST .+4
IN DDEC,0
SKIPA
JRST .+3
ILDB ARGAC,DECBUF+1
RETURN
GETSTS DDEC,A2
RELEASE DDEC,
MOVE A1,SVJFF
MOVEM A1,JOBFF
HALT
MSCAN: JUMP 0
MOVN BITS
MOVEM NITS#
HRRZ TVWD
ADD TVOUT
MOVEM TVPOI#
HRRZI EDGEC
MOVE 1,0
ADDI 1,3363
MOVE 2,(1)
MOVEM 2,FILP#
ADDI 2,1
MOVE 1,2
IMULI 1,10
ADDI 1,10
ADD 1,0
MOVEM 1,FILT#
MOVE 1,2
ADD 1,0
ADDI 1,2620
MOVEM 1,FILX#
ADDI 1,261
MOVEM 1,FILY#
MOVEI 15,0
M4: SETZM GRID(15)
CAIGE 15,↑D997
AOJA 15,M4
JRA 16, 0(16)
SEINT: JUMP 0
MOVE 0,@ 0(16)
MOVE 6,@ 1(16)
CAIL 0,↑D333
HALT
CAIG 0,0
HALT
CAIL 6,↑D256
HALT
CAIG 6,0
HALT
MOVE 1,0
ADDI 1,1
IDIVI 1,2
MOVE 2,0
SUBI 2,1
IDIVI 2,2
MOVE 3,6
ADDI 3,1
IDIVI 3,2
MOVE 4,6
SUBI 4,1
IDIVI 4,2
IMULI 3,↑D166
IMULI 4,↑D166
MOVE 7,2
ADD 7,3
MOVE 5,1
ADD 5,3
MOVE 3,2
ADD 3,4
ADD 1,4
IDIVI 1,↑D36
IDIVI 3,↑D36
IDIVI 5,↑D36
IDIVI 7,↑D36
ADDI 1,GRID
ADDI 3,GRID
ADDI 5,GRID
ADDI 7,GRID
MOVEI 9,1
LSH 9,@8
MOVEI 8,1
LSH 8,@6
MOVEI 6,1
LSH 6,@4
MOVEI 4,1
LSH 4,@2
ORM 4,@1
ORM 6,@3
ORM 8,@5
ORM 9,@7
JRA 16,2(16)
SEINF: JUMP 0
MOVE 1,@0(16)
MOVE 3,@1(16)
CAIL 1,↑D333
HALT
CAIG 1,0
HALT
CAIL 3,↑D256
HALT
CAIG 3,0
HALT
IDIVI 1,2
IDIVI 3,2
IMULI 3,↑D166
ADD 1,3
IDIVI 1,↑D36
ADDI 1,GRID
MOVEI 4,1
LSH 4,@2
SETZ 0
TDNE 4,@1
SETO 0
JRA 16,2(16)
GRID: BLOCK ↑D598
PROJEC: JUMP 0
MOVEM 16,RETAD
MOVE @0(16)
SUB LSIDE
MOVEM X
MOVE @1(16)
SUB FLINE
MOVEM Y
SETZ 1,
SETZ 2,
SETZ 3,
SETZ 4,
SETZ 5,
SETZ 6,
SETZ 7,
SETZ 10,
MOVE 11,FILX ;LAST USED ELEMENT IN ARRAY XP
MOVE 12,FILY ; " " " " " YP
MOVE 13,FILT ; " " " " " T
MOVE 16,FILP ; =PARMAX
HRLI 13,377777
P10: MOVE 14,X
MOVE 0,Y
ADD 14,@11
ADD 0,@12
IMUL 0,LINLEN
IDIV 14,SAMP
ADD 14
ADD TVPOI
IMUL 15,NITS
ADDI 15,44
DPB 15,[POINT 6,0,5]
ILDB 0,0
FSC 0,233
POP 13,14
FMPR 14,0
FADR 7,14
POP 13,14
FMPR 14,0
FADR 6,14
POP 13,14
FMPR 14,0
FADR 5,14
POP 13,14
FMPR 14,0
FADR 4,14
POP 13,14
FMPR 14,0
FADR 3,14
POP 13,14
FMPR 14,0
FADR 2,14
POP 13,14
FMPR 14,0
FADR 1,14
POP 13,14
FMPR 14,0
FADR 10,14
SUBI 11,1
SUBI 12,1
SOJGE 16,P10
MOVEM 10,EDGEC
MOVEM 1,EDGEC+1
MOVEM 2,EDGEC+2
MOVEM 3,EDGEC+3
MOVEM 4,EDGEC+4
MOVEM 5,EDGEC+5
MOVEM 6,EDGEC+6
MOVEM 7,EDGEC+7
MOVE 16,RETAD
JRA 16,2(16)
X: 0
Y: 0
END